home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 April / EnigmA AMIGA RUN 06 (1996)(G.R. Edizioni)(IT)[!][issue 1996-04][Skylink CD V].iso / progs / editor / write-ed / rexx / newrev.wrx < prev    next >
Text File  |  1995-05-01  |  6KB  |  271 lines

  1. /*
  2.  * NewRev.wrx -- C source revision bumper for WRITE
  3.  *
  4.  * ©1994 by MGR-Software, Asgard
  5.  * written by Lars Hanke
  6.  *
  7.  * Contact me via:
  8.  *
  9.  *  InterNet: mgr@asgard.bo.open.de
  10.  *      FIDO: Lars Hanke @ 2:243/4802.22
  11.  *    AmyNet: Lars Hanke @ 39:170/505.22
  12.  *
  13.  * Needs the source header to resemble Header.tpl
  14.  *
  15.  * If the argument is:
  16.  *      FIRST:   the very first comment will be processed
  17.  *       LAST:   the directly preceeding comment will be processed
  18.  *   anything:   the next comment will be processed
  19.  *
  20.  * Finds the second comment block and
  21.  *
  22.  * - seeks the entry "Revisor:" and replaces its contents by the contents
  23.  *   of the "RealName" environment variable
  24.  *
  25.  * - seeks the entry "Revised:" and replaces its contents by the current
  26.  *   date
  27.  *
  28.  * - seeks the entry "Revision:" and increases the post comma number
  29.  *
  30.  * Finds the last comment block and seeks the entry "HISTORY". Opens
  31.  * a new Ed and requests notes on the last changes to place them with
  32.  * the current date and revision in standard alignment.
  33.  *
  34.  * This comment block contains a proper second block and a proper HISTORY
  35.  * section!
  36.  *
  37.  ***********************************************************************
  38.  *
  39.  *   Revisor: Lars Hanke
  40.  *   Revised: 06/04/94
  41.  *  Revision: 1.3
  42.  *
  43.  ***********************************************************************
  44.  *
  45.  * HISTORY
  46.  *
  47.  * Rev: 1.3     -- 06/04/94
  48.  *     - worked around the WRITE bug
  49.  * Rev: 1.2     -- 06/04/94
  50.  *     - the problem is a WRITE bug, problem reported to the author
  51.  * Rev: 1.1     -- 06/04/94
  52.  *     - got it finally running, seems to be a minor bug if the cursor
  53.  *       is at the file top
  54.  */
  55.  
  56. arg cs
  57.  
  58. IF ~show('P',"WRITE")
  59. THEN DO
  60.  say 'This script does not make sense without the "WRITE" editor !'
  61.  exit 10
  62. END
  63.  
  64. address 'WRITE'
  65. options results
  66.  
  67. 'VERSIONCHECK 40000 "NewRev.wrx"'
  68. IF RC~=0 THEN DO
  69.   exit 10
  70. END
  71.  
  72. 'LockWindow _CurrentID'
  73.  
  74. if (RC ~= 0)
  75. then do
  76.  'MessageOK "You should have a window!"'
  77.  exit 10
  78. end
  79.  
  80. /* store current position */
  81.  
  82. 'GETVAR "_XPOS"'
  83. a.x=RESULT
  84. 'GETVAR "_YPOS"'
  85. a.y=RESULT
  86.  
  87. /* find the comment block to process */
  88.  
  89. 'SETVAR "_FindString" "/*"'
  90.  
  91. if(cs="FIRST") then
  92. do
  93.   'CursorDown 0'
  94.   'Find 1 1 @EOT @EOT {@SILENT @NOWORD}'
  95.   if(RC ~= 0) then call terminate("This text does not contain any comment!")
  96. end
  97. else
  98. if(cs="LAST") then
  99. do
  100.   c.x = 0
  101.   c.y = 0
  102.   c.g = 1
  103.   'Goto 1 1'
  104.  
  105.   do until ((c.y > a.y) | (c.g = 0))
  106.      'Find @CURSOR @CURSOR @EOT @EOT {@SILENT @NOWORD}'
  107.      if(RC ~= 0) then
  108.      do
  109.         if(c.x = 0) then call terminate("This text does not contain any comment!")
  110.         else c.g = 0
  111.      end
  112.      'GETVAR "_XPOS"'
  113.      c.x=RESULT
  114.      'GETVAR "_YPOS"'
  115.      c.y=RESULT
  116.   end
  117.  
  118.   'Goto' c.x c.y
  119. end
  120. else do
  121.   'Find @CURSOR @CURSOR @EOT @EOT {@SILENT @NOWORD}'
  122.   if(RC ~= 0) then call terminate("This text does not contain any comment!")
  123. end
  124.  
  125. /* store comment position */
  126.  
  127. 'GETVAR "_XPOS"'
  128. c.x=RESULT
  129. 'GETVAR "_YPOS"'
  130. c.y=RESULT
  131.  
  132. /* Find end of comment */
  133.  
  134. 'SETVAR "_FindString" "*/"'
  135. 'Find @CURSOR @CURSOR @EOT @EOT {@SILENT @NOWORD}'
  136. if(RC ~= 0) then call terminate("Comment is not call terminated!")
  137.  
  138. /* store end of comment */
  139.  
  140. 'GETVAR "_XPOS"'
  141. e.x=RESULT
  142. 'GETVAR "_YPOS"'
  143. e.y=RESULT
  144.  
  145. /* find first marker */
  146.  
  147. 'SETVAR "_FindString" " *****"'
  148. 'Find' c.x c.y e.x e.y '{@SILENT @NOWORD}'
  149. if(RC ~= 0) then call terminate("No comment block marker found!")
  150.  
  151. /* and store it */
  152.  
  153. 'GETVAR "_XPOS"'
  154. f.x=RESULT
  155. 'GETVAR "_YPOS"'
  156. f.y=RESULT
  157.  
  158. /* find second marker */
  159.  
  160. 'Find @CURSOR @CURSOR' e.x e.y '{@SILENT @NOWORD}'
  161. if(RC = 0) then
  162. do
  163.   'GETVAR "_XPOS"'
  164.   s.x=RESULT
  165.   'GETVAR "_YPOS"'
  166.   s.y=RESULT
  167.  
  168.   /* now process second comment section */
  169.  
  170.   if(skip_clear("Revisor:",CLEAR) = 0) then
  171.   do
  172.      IF Open(File,"ENV:RealName",r) THEN
  173.      DO
  174.         Name = READLN(File)
  175.         call Close(File)
  176.      END
  177.      ELSE DO
  178.         'GetString (Please enter your name:) "" {@TOMOUSE}'
  179.         'GETVAR "_RS"'
  180.         Name = RESULT
  181.      END
  182.      'WriteText "'||Name||'"'
  183.   end
  184.  
  185.   if(skip_clear("Revised:",CLEAR) = 0) then
  186.   do
  187.      'WriteText "'||date('E')||'"'
  188.   end
  189.  
  190.   if(skip_clear("Revision:",noclear) = 0) then
  191.   do
  192.      'GetVar "_CurrentLine"'
  193.      line = RESULT
  194.      'GetVar "_XPos"'
  195.      xp = RESULT
  196.      line = delstr(line,1,xp-1)
  197.      line = strip(line)
  198.      pt = pos('.',line)
  199.      if(pt = 0) then call terminate("Bad revision entry!")
  200.      pt = pt + 1
  201.      rev = substr(line,pt)
  202.      line = left(line,pt-1)
  203.      rev = rev + 1
  204.      ver = line || rev
  205.      'DeleteArea @CURSOR @CURSOR @EOL @EOL'
  206.      'WriteText "' ver||'"'
  207.   end
  208.   else call terminate("No revision entry found!")
  209. end
  210.  
  211. /* find the HISTORY section */
  212.  
  213. 'SetVar "_FindString" " *****"'
  214. 'Goto' c.x c.y
  215. do until (RC ~= 0)
  216.   'Find @CURSOR @CURSOR' e.x e.y '{@SILENT @NOWORD}'
  217.   if(RC = 0) then
  218.   do
  219.      'GETVAR "_XPOS"'
  220.      s.x=RESULT
  221.      'GETVAR "_YPOS"'
  222.      s.y=RESULT
  223.   end
  224. end
  225.  
  226. 'SetVar "_FindString" "HISTORY"'
  227. 'Find' s.x s.y e.x e.y '{@SILENT @WORD}'
  228. if(RC = 0) then
  229. do
  230.   'CursorDown 0'
  231.   'Goto @EOL @EOL'
  232.   'Return'
  233.   'WriteText "* Rev:' left(ver,7,' ') '--' date('E') '"'
  234.   'Return'
  235.   'WriteText "*     - "'
  236. end
  237. else 'Goto' a.x a.y
  238.  
  239. 'LockWindow 0'
  240. exit 0
  241.  
  242. skip_clear: procedure EXPOSE f. s.
  243.   parse arg item, mode
  244.  
  245.   'SETVAR "_FindString" ('||item||')'
  246.   'Find' f.x f.y s.x s.y '{@SILENT}'
  247.   ret = RC
  248.   if(RC = 0) then
  249.   do
  250.      'GETVAR "_XPOS"'
  251.      x = RESULT
  252.      x = x + length(item)
  253.      'Goto' x '@CURSOR'
  254.      if(mode = "CLEAR") then
  255.      do
  256.         'DeleteArea @CURSOR @CURSOR @EOL @EOL'
  257.         'WriteText " "'
  258.      end
  259.   end
  260.  
  261. return ret
  262.  
  263. terminate: procedure EXPOSE a.
  264.   parse arg message
  265.  
  266.   'MessageOK ('||message||')'
  267.   'Goto' a.x a.y
  268.   'LockWindow 0'
  269.   exit 0
  270.  
  271.